from django.db import models

class Catalog(models.Model):
    """
    资源分类表：
	名字、 上一级分类ID（关系属性）,  录入时间、修改时间、是否删除
    """
    name = models.CharField(max_length=32, verbose_name="分类名称", db_comment="资源分类名称")

    # 关键自己使用 self 表示
    parent = models.ForeignKey(to='self', null=True, blank=True, verbose_name="上级分类", db_comment="上级分类",
                               on_delete=models.CASCADE, related_name="sub_catalogs")

    create_time = models.DateTimeField(verbose_name="录入时间", db_comment="录入时间", auto_now_add=True)

    update_time = models.DateTimeField(verbose_name="修改时间", db_comment="修改时间", auto_now=True)

    is_delete = models.BooleanField(verbose_name="是否删除", db_comment="是否删除", default=False)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "tb_catalog"
        verbose_name_plural = "资源类型"


class Resource(models.Model):
    """
    资源表：
	资源名、描述、关键字、所属分类（关系属性）、积分、资源存储路径、
	资源大小、浏览数量（不合适）、资源扩展名、 录入时间、
	资源等级(计算属性、不合适)、 下载次数 (不合适)、
	所属用户（关系属性）、 资源状态( 审核通过/未通过 / 待审核) 、
	原因 (未审核通过的原因) 、 审核人
	修改时间、是否删除 、 是否精选
    """
    name = models.CharField(max_length=255, verbose_name="资源名称", db_comment="资源名称")

    desc = models.TextField(verbose_name="资源描述", db_comment="资源描述", null=True, blank=True)

    keywords = models.CharField(max_length=128, verbose_name="资源关键字", db_comment="资源关键字")

    catalog = models.ForeignKey(to="Catalog", verbose_name="所属分类", null=True, blank=True,
                                db_comment="所属分类", on_delete=models.CASCADE)

    score = models.IntegerField(verbose_name="资源积分", db_comment="资源积分")

    path = models.FileField(upload_to="resource/", verbose_name="资源存储路径")

    # 资源大小, 存储单位为字节
    size = models.BigIntegerField(verbose_name="资源大小", db_comment="资源大小", null=True, blank=True)

    ext = models.CharField(max_length=16, verbose_name="资源扩展名", db_comment="资源扩展名", null=True, blank=True)

    create_time = models.DateTimeField(verbose_name="资源创建时间", db_comment="资源创建时间", auto_now_add=True)

    update_time = models.DateTimeField(verbose_name="资源更新时间", db_comment="资源更新时间", auto_now=True)

    user = models.ForeignKey(to="auth.User", verbose_name="所属用户", null=True, blank=True, on_delete=models.CASCADE)

    state = models.CharField(max_length=10, verbose_name="资源状态", choices=(('0', '待审核'), ('1', '已审核'), ('-1', '未通过')),
                             db_comment="资源状态", default='0')

    reason = models.CharField(max_length=128, verbose_name="未通过原因", db_comment="未通过原因", null=True, blank=True)

    admin = models.CharField(max_length=150, verbose_name="审核人", db_comment="审核人", null=True, blank=True)

    is_best = models.BooleanField(verbose_name="是否精选", db_comment="是否精选", default=False)

    is_delete = models.BooleanField(verbose_name="是否删除", db_comment="是否删除", default=False)

    class Meta:
        db_table = "tb_resource"


class ResourceDownloadHistory(models.Model):
    """
    资源下载历史表
	 资源（关系属性）,  用户（关系属性） 、下载时间、下载方式
    """
    resource = models.ForeignKey(to=Resource, verbose_name="资源", on_delete=models.CASCADE)

    user = models.ForeignKey(to="auth.User", verbose_name="下载用户", on_delete=models.CASCADE)

    download_time = models.DateTimeField(verbose_name="下载时间", db_comment="下载时间", auto_now_add=True)

    # download_type = models.CharField(max_length=10, verbose_name="下载方式", db_comment="下载方式")

    class Meta:
        db_table = "tb_resource_download_history"

class ResourceComment(models.Model):
    """
    资源评论表
    资源（关系属性）、 评论用户（关系属性） 、
	资源星级、 评论内容， 评论时间、
	评论状态( 审核通过/未通过) 、
	原因 (未审核通过的原因) 、 审核人
	是否删除
    """
    resource = models.ForeignKey(to=Resource, verbose_name="资源", on_delete=models.CASCADE)

    user = models.ForeignKey(to="auth.User", verbose_name="评论用户", on_delete=models.CASCADE)

    star = models.IntegerField(verbose_name="资源星级", db_comment="资源星级", default=5)

    content = models.TextField(verbose_name="评论内容", db_comment="评论内容")

    comment_time = models.DateTimeField(verbose_name="评论时间", db_comment="评论时间", auto_now_add=True)

    state = models.CharField(max_length=10, verbose_name="资源状态",
                             choices=(('0', '待审核'), ('1', '已审核'), ('-1', '未通过')),
                             db_comment="资源状态", default='0')

    reason = models.CharField(max_length=128, verbose_name="未通过原因", db_comment="未通过原因", null=True, blank=True)

    admin = models.CharField(max_length=150, verbose_name="审核人", db_comment="审核人", null=True, blank=True)

    is_delete = models.BooleanField(verbose_name="是否删除", db_comment="是否删除", default=False)

    class Meta:
        db_table = "tb_resource_comment"


class ResourceCollect(models.Model):
    """
    资源收藏表
    资源（关系属性）、 用户（关系属性）、 收藏时间
    """
    resource = models.ForeignKey(to=Resource, verbose_name="资源", on_delete=models.CASCADE)

    user = models.ForeignKey(to="auth.User", verbose_name="用户", on_delete=models.CASCADE)

    collect_time = models.DateTimeField(verbose_name="收藏时间", db_comment="收藏时间", auto_now_add=True)

    class Meta:
        db_table = "tb_resource_collect"
        unique_together = ("resource", "user")

